#include "sqlitedatabasedao.h"

SQliteDatabaseDAO::SQliteDatabaseDAO() {}

void SQliteDatabaseDAO::connectDatabase(QString dbName)
{
    if (dbName.isEmpty()) {
        dbName = SQliteDatabaseDAO::dbName;
    }
    qInfo() << QString("加载数据库驱动: %1 ...").arg("QSQLITE");
    database = QSqlDatabase::addDatabase("QSQLITE");
    qInfo() << QString("初始化数据库: %1 ...").arg(SQliteDatabaseDAO::dbName);
    database.setDatabaseName(SQliteDatabaseDAO::dbName);
}

void SQliteDatabaseDAO::openDatabase()
{
    if (!database.open()) {
        qWarning() << QString("打开数据库失败，失败原因: %1！").arg(database.lastError().text());
        return;
    } else {
        qInfo() << QString("打开数据库成功！");
    }
}

void SQliteDatabaseDAO::closeDatabase()
{
    if (database.isOpen()) {
        database.close();
        qInfo() << QString("关闭数据库成功！");
    }
}

void SQliteDatabaseDAO::createDatabaseTable(QString dbName)
{
    QSqlQuery query;
    if (database.tables().contains("seat")) {
        qDebug() << QString("数据库表 %1 已经存在").arg("seat");
    } else {
        QString cmd = "create table seat(id INTEGER PRIMARY KEY AUTOINCREMENT,seatnumber "
                      "TEXT,traynumber TEXT,seatdirection TEXT,note TEXT)";
        query.prepare(cmd);
        if (!query.exec()) {
            qWarning() << QString("数据库表 %1 创建失败！").arg("seat");
        } else {
            qInfo() << QString("数据库表 %1 创建成功！").arg("seat");
        }
    }

    if (database.tables().contains("detection")) {
        qDebug() << QString("数据库表 %1 已经存在").arg("detection");
    } else {
        QString cmd = "create table detection(id INTEGER PRIMARY KEY AUTOINCREMENT,seatid "
                      "INTEGER,position TEXT,detecttime TEXT,note TEXT)";
        query.prepare(cmd);
        if (!query.exec()) {
            qWarning() << QString("数据库表 %1 创建失败！").arg("detection");
        } else {
            qInfo() << QString("数据库表 %1 创建成功！").arg("detection");
        }
    }

    if (database.tables().contains("defect")) {
        qDebug() << QString("数据库表 %1 已经存在").arg("defect");
    } else {
        QString cmd = "create table defect(id INTEGER PRIMARY KEY AUTOINCREMENT,detectionid "
                      "INTEGER,type TEXT,x FLOAT,y FLOAT,w FLOAT,h FLOAT,note TEXT)";
        query.prepare(cmd);
        if (!query.exec()) {
            qWarning() << QString("数据库表 %1 创建失败！").arg("defect");
        } else {
            qInfo() << QString("数据库表 %1 创建成功！").arg("defect");
        }
    }
}

void SQliteDatabaseDAO::test() {}
